﻿using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using Request.Extension;

namespace Request
{
    /// <summary>
    /// Выполняет синхронные/асинхронные запросы на сервер
    /// </summary>
    public class Navigator : Singleton<Navigator>, IRequest
    {
        #region Настройки

        private static AsyncCallback GetResponse(Action<string> onSuccess, Action<WebException> onFalied)
        {
            return result =>
            {
                var webRequest = result.AsyncState as HttpWebRequest;
                try
                {
                    using (var webResponse = webRequest.EndGetResponse(result) as HttpWebResponse)
                    {
                        using (var streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
                        {
                            if (onSuccess.Exists())
                            {
                                onSuccess(streamReader.ReadToEnd());
                            }
                        }
                    }
                }
                catch (WebException e)
                {
                    if (onFalied.Exists())
                    {
                        onFalied(e);
                    }
                }
            };
        }

        public static string GetData(object param)
        {
            var properties = param.GetType().GetProperties();
            var first = properties.FirstOrDefault();
#if NET_4_5
            var result = new StringBuilder(string.Format("{0}={1}", first.Name, first.GetValue(param)));
            foreach (var propertyInfo in properties.Skip(1))
            {
                result.AppendFormat("&{0}={1}", propertyInfo.Name, propertyInfo.GetValue(param));
            }
#else
            var result = new StringBuilder(string.Format("{0}={1}", first.Name, first.GetValue(param, null)));
            foreach (var propertyInfo in properties.Skip(1))
            {
                result.AppendFormat("&{0}={1}", propertyInfo.Name, propertyInfo.GetValue(param, null));
            }
#endif
            return result.ToString();
        }

        private void CreateRequest(string url, string data, bool isAsync, HttpMethod httpMethod, Action<string> onSuccess, Action<WebException> onFalied)
        {
            var webRequest = WebRequest.Create(url) as HttpWebRequest;
            try
            {
                webRequest.ContentType = "application/x-www-form-urlencoded";
                webRequest.UserAgent = UserAgent;
                if (isAsync)
                {
                    switch (httpMethod)
                    {
                        case HttpMethod.Get:
                        case HttpMethod.Head:
                            webRequest.Method = httpMethod.ToString().ToUpperInvariant();
                            webRequest.BeginGetResponse(GetResponse(onSuccess, onFalied), webRequest);
                            break;
                        case HttpMethod.Post:
                        case HttpMethod.Put:
                        case HttpMethod.Delete:
                            webRequest.Method = httpMethod.ToString().ToUpperInvariant();
                            webRequest.BeginGetRequestStream(result =>
                            {
                                var tempRequest = result.AsyncState as HttpWebRequest;
                                try
                                {
                                    if (data.Exists())
                                    {
                                        using (var streamWriter = tempRequest.EndGetRequestStream(result))
                                        {
                                            var bytes = Encoding.UTF8.GetBytes(data);
                                            streamWriter.Write(bytes, 0, bytes.Length);
                                        }
                                    }
                                    tempRequest.BeginGetResponse(GetResponse(onSuccess, onFalied), tempRequest);
                                }
                                catch (WebException exception)
                                {
                                    if (onFalied.Exists())
                                    {
                                        onFalied(exception);
                                    }
                                }

                            }, webRequest);
                            break;
                    }
                }
                else
                {
                    switch (httpMethod)
                    {
                        case HttpMethod.Get:
                        case HttpMethod.Head:
                            webRequest.Method = httpMethod.ToString().ToUpperInvariant();
                            using (var webResponse = webRequest.GetResponse() as HttpWebResponse)
                            {
                                using (var streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
                                {
                                    if (onSuccess.Exists())
                                    {
                                        onSuccess(streamReader.ReadToEnd());
                                    }
                                }
                            }
                            break;
                        case HttpMethod.Post:
                        case HttpMethod.Put:
                        case HttpMethod.Delete:
                            webRequest.Method = httpMethod.ToString().ToUpperInvariant();
                            if (data.Exists())
                            {
                                using (var streamWriter = webRequest.GetRequestStream())
                                {
                                    var bytes = Encoding.UTF8.GetBytes(data);
                                    streamWriter.Write(bytes, 0, bytes.Length);
                                }
                            }
                            using (var webResponse = webRequest.GetResponse() as HttpWebResponse)
                            {
                                using (var streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
                                {
                                    if (onSuccess.Exists())
                                    {
                                        onSuccess(streamReader.ReadToEnd());
                                    }
                                }
                            }
                            break;
                    }
                }
            }
            catch (WebException exception)
            {
                if (onFalied.Exists())
                {
                    onFalied(exception);
                }
            }
        }

        private Navigator() { }

        #endregion

        #region Члены IRequest

        /// <summary>
        /// Агент пользователя
        /// </summary>
        public string UserAgent { get { return GetType().Assembly.FullName; } }

        #endregion

        #region Члены IGet

        /// <summary>
        /// Выполняет синхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Get(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Get, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Get(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Get, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Get(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Get, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Get(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Get, null, null);
        }

        /// <summary>
        /// Выполняет синхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Get(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Get, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Get(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, false, HttpMethod.Get, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Get(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Get, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Get(string url)
        {
            CreateRequest(url, null, false, HttpMethod.Get, null, null);
        }

        #endregion

        #region Члены IGetAsync

        /// <summary>
        /// Выполняет асинхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void GetAsync(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Get, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void GetAsync(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Get, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void GetAsync(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Get, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void GetAsync(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Get, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void GetAsync(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Get, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void GetAsync(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, true, HttpMethod.Get, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void GetAsync(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Get, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный GET запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void GetAsync(string url)
        {
            CreateRequest(url, null, true, HttpMethod.Get, null, null);
        }

        #endregion

        #region Члены IPost

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(Uri url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(Uri url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Post(Uri url, object data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Post(Uri url, object data)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Post(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(Uri url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(Uri url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Post(Uri url, string data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Post(Uri url, string data)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Post(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(string url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(string url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Post(string url, object data, Action<string> onSuccess)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Post(string url, object data)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Post(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, false, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(string url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, data, false, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Post(string url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url, data, false, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Post(string url, string data, Action<string> onSuccess)
        {
            CreateRequest(url, data, false, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Post(string url, string data)
        {
            CreateRequest(url, data, false, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет синхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Post(string url)
        {
            CreateRequest(url, null, false, HttpMethod.Post, null, null);
        }

        #endregion

        #region Члены IPostAsync

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(Uri url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(Uri url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PostAsync(Uri url, object data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void PostAsync(Uri url, object data)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PostAsync(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(Uri url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(Uri url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PostAsync(Uri url, string data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void PostAsync(Uri url, string data)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void PostAsync(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(string url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(string url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PostAsync(string url, object data, Action<string> onSuccess)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void PostAsync(string url, object data)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PostAsync(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, true, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(string url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, data, true, HttpMethod.Post, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PostAsync(string url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url, data, true, HttpMethod.Post, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PostAsync(string url, string data, Action<string> onSuccess)
        {
            CreateRequest(url, data, true, HttpMethod.Post, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void PostAsync(string url, string data)
        {
            CreateRequest(url, data, true, HttpMethod.Post, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный POST запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void PostAsync(string url)
        {
            CreateRequest(url, null, true, HttpMethod.Post, null, null);
        }

        #endregion

        #region Члены IPut

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(Uri url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(Uri url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Put(Uri url, object data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Put(Uri url, object data)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Put(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(Uri url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(Uri url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Put(Uri url, string data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Put(Uri url, string data)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Put(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(string url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(string url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Put(string url, object data, Action<string> onSuccess)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Put(string url, object data)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Put(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, false, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(string url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, data, false, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Put(string url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url, data, false, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Put(string url, string data, Action<string> onSuccess)
        {
            CreateRequest(url, data, false, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Put(string url, string data)
        {
            CreateRequest(url, data, false, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет синхронный PUT запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Put(string url)
        {
            CreateRequest(url, null, false, HttpMethod.Put, null, null);
        }

        #endregion

        #region Члены IPutAsync

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(Uri url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(Uri url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PutAsync(Uri url, object data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void PutAsync(Uri url, object data)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PutAsync(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(Uri url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(Uri url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PutAsync(Uri url, string data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void PutAsync(Uri url, string data)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void PutAsync(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(string url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(string url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PutAsync(string url, object data, Action<string> onSuccess)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void PutAsync(string url, object data)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PutAsync(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, true, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(string url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, data, true, HttpMethod.Put, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void PutAsync(string url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url, data, true, HttpMethod.Put, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void PutAsync(string url, string data, Action<string> onSuccess)
        {
            CreateRequest(url, data, true, HttpMethod.Put, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void PutAsync(string url, string data)
        {
            CreateRequest(url, data, true, HttpMethod.Put, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный Put запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void PutAsync(string url)
        {
            CreateRequest(url, null, true, HttpMethod.Put, null, null);
        }

        #endregion

        #region Члены IDelete

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(Uri url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(Uri url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Delete(Uri url, object data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Delete(Uri url, object data)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), false, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Delete(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(Uri url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(Uri url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Delete(Uri url, string data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Delete(Uri url, string data)
        {
            CreateRequest(url.AbsoluteUri, data, false, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Delete(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(string url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(string url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Delete(string url, object data, Action<string> onSuccess)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Delete(string url, object data)
        {
            CreateRequest(url, GetData(data), false, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Delete(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, false, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(string url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, data, false, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Delete(string url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url, data, false, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Delete(string url, string data, Action<string> onSuccess)
        {
            CreateRequest(url, data, false, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void Delete(string url, string data)
        {
            CreateRequest(url, data, false, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет синхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Delete(string url)
        {
            CreateRequest(url, null, false, HttpMethod.Delete, null, null);
        }

        #endregion

        #region Члены IDeleteAsync

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(Uri url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(Uri url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void DeleteAsync(Uri url, object data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void DeleteAsync(Uri url, object data)
        {
            CreateRequest(url.AbsoluteUri, GetData(data), true, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void DeleteAsync(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(Uri url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(Uri url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void DeleteAsync(Uri url, string data, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void DeleteAsync(Uri url, string data)
        {
            CreateRequest(url.AbsoluteUri, data, true, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void DeleteAsync(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(string url, object data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(string url, object data, Action<WebException> onFalied)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void DeleteAsync(string url, object data, Action<string> onSuccess)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void DeleteAsync(string url, object data)
        {
            CreateRequest(url, GetData(data), true, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void DeleteAsync(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, true, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(string url, string data, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, data, true, HttpMethod.Delete, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void DeleteAsync(string url, string data, Action<WebException> onFalied)
        {
            CreateRequest(url, data, true, HttpMethod.Delete, null, onFalied);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void DeleteAsync(string url, string data, Action<string> onSuccess)
        {
            CreateRequest(url, data, true, HttpMethod.Delete, onSuccess, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="data">Параметры запроса</param>
        public void DeleteAsync(string url, string data)
        {
            CreateRequest(url, data, true, HttpMethod.Delete, null, null);
        }

        /// <summary>
        /// Выполняет асинхронный DELETE запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void DeleteAsync(string url)
        {
            CreateRequest(url, null, true, HttpMethod.Delete, null, null);
        }

        #endregion

        #region Члены IHead

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Head(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Head, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Head(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Head, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Head(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Head, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Head(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, false, HttpMethod.Head, null, null);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Head(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Head, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void Head(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, false, HttpMethod.Head, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void Head(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, false, HttpMethod.Head, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void Head(string url)
        {
            CreateRequest(url, null, false, HttpMethod.Head, null, null);
        }

        #endregion

        #region Члены IHeadAsync

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void HeadAsync(Uri url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Head, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void HeadAsync(Uri url, Action<WebException> onFalied)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Head, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void HeadAsync(Uri url, Action<string> onSuccess)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Head, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void HeadAsync(Uri url)
        {
            CreateRequest(url.AbsoluteUri, null, true, HttpMethod.Head, null, null);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void HeadAsync(string url, Action<string> onSuccess, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Head, onSuccess, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onSuccess">Callback успешного результата</param>
        public void HeadAsync(string url, Action<string> onSuccess)
        {
            CreateRequest(url, null, true, HttpMethod.Head, onSuccess, null);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        /// <param name="onFalied">Callback неудачного запроса</param>
        public void HeadAsync(string url, Action<WebException> onFalied)
        {
            CreateRequest(url, null, true, HttpMethod.Head, null, onFalied);
        }

        /// <summary>
        /// Выполняет синхронный HEAD запрос на сервер
        /// </summary>
        /// <param name="url">URL сервера</param>
        public void HeadAsync(string url)
        {
            CreateRequest(url, null, true, HttpMethod.Head, null, null);
        }

        #endregion
    }
}